package com.example.myapplication

import android.util.Log
import java.util.*

fun main(args: Array<String>) {

}
/**
 * fun固定写法 plus函数名称 （a参数类型为Int b参数类型为Int）：Int返回值类型
 */
fun plus(a: Int, b: Int): Int {
    return a + b
}

fun boolean(): Boolean {
    val a: Int = 1
    return a > 1
}

/**
 * 字符串模板,String后加上？号表示参数可以为空
 */

fun placeholderDemo(placeholder: String?): String {

    val temp = """今天${placeholder}"""

    return temp
}

/**
 *字符串比较
 */
fun Compare() {

    val a: String = "and"
    val b: String = "And"
    //第二个参数表示忽略大小写,如果第二个参数true结果就是true，如果是false结果为false
    val boolean: Boolean = a.equals(b, true)

    Log.e("main", "" + boolean)

}

/**
 * 语法when,相当于java的switch
 */

fun whenDemo() {
    val num: Int = 4

    val result = when (num) {
        1 -> "一"
        2 -> "二"
        3 -> "三"
        else -> "傻傻分不清"
    }
    Log.e("Main", result)
}

/**
 * 循环 for循环
 */

fun cycle() {
    //num数组1~12
    val num = 1..12
    for (a in num) {
        Log.e("main", a.toString())
    }
    //num2等于num反转（12~1）
    val num2 = num.reversed()
    for (a in num2) {
        Log.e("main", a.toString())
    }
    //每次循环跳过去2个数
    for (a in num2 step 2) {
        Log.e("main", a.toString())
    }
    Log.e("main", num2.count().toString())
}

/**
 * listDemo
 */

fun listDemo() {
    //一个list
    val lists = listOf("A", "B", "C", "D")
    //i list下标 e下标对应的内容
    for ((i, e) in lists.withIndex()) {
        Log.e("main", "$i $e")
    }
}

/**
 * mapDemo
 */
fun map() {
    val map = TreeMap<String, String>()
    map["hao"] = "good"
    Log.e("main", map["hao"])
}

/**
 * 函数和函数表达式
 * add()和add2的结果是一样的
 */

fun add(x: Int, y: Int): Int {
    return x + y
}

fun add2(x: Int, y: Int): Int = x + y

/**
 *将一个变量声明成一个函数
 */
fun variation() {

    // i是简洁的写法 j是另一种写法
    val i = { x: Int, y: Int -> x + y }
    val j: (Int, Int) -> Int = { x, y -> x + y }
    //result等于6
    val result = i(1, 5)
    //result2等于7
    val result2 = j(2, 5)

}

/**
 * 数据类型转换
 */
fun conversion() {
    var a = "12"
    var b = 12
    //将int类型转换成String
    a = b.toString()
    //将String类型转换成Int
    b = a.toInt()
}

/**
 * 尾递归优化
 */
tailrec fun ollAdd(a: Int, b: Int): Int {

    if (a == 0) {
        return 1
    } else {
        return ollAdd(a - 1, a + b)
    }

}

/**
 * 面向对象
 */
class Girl(var x: Int, var y: Int) {

    fun smile() {
        Log.e("main", "妹纸笑了")
    }

    fun cry() {
        Log.e("main", "妹纸哭了")
    }

}

fun object0() {

    val girl = Girl(1, 5)
    girl.cry()
    girl.smile()

}